package co.edu.ucatolica.sislab.web.backinbeans;


import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.faces.event.ActionEvent;
import javax.faces.model.SelectItem;

import co.edu.ucatolica.sislab.SISLABService;
import co.edu.ucatolica.sislab.domainlist.domain.DomainListItemBean;
import co.edu.ucatolica.sislab.persistence.DatabaseException;
import co.edu.ucatolica.sislab.users.domain.UserBean;
import co.edu.ucatolica.sislab.sanciones.domain.SancionBean;
import co.edu.ucatolica.sislab.users.domain.UserDataBean;

public class SancionesBackInBean {
	private static SISLABService service = SISLABService.getInstance();
	private Long codigo;
	private String nombre;
	private static Map<String, DomainListItemBean> motivosMap;
	private static Map<String, DomainListItemBean> castigosMap;
	private List<SelectItem> motivos;
	private String motivoSeleccionado;
	private List<SelectItem> castigos;
	private String castigoSeleccionado;
	private String thisPage;
	
	public String getMotivoSeleccionado() {
		return motivoSeleccionado;
	}
	public void setMotivoSeleccionado(String motivoSeleccionado) {
		this.motivoSeleccionado = motivoSeleccionado;
	}
	public List<SelectItem> getMotivos() {
		motivosMap = new HashMap<String, DomainListItemBean>();
		motivos = new ArrayList<SelectItem>();
		try {
			List<DomainListItemBean> motivosBean = service.getMotivos();
			for (DomainListItemBean domainListItemBean : motivosBean) {
				motivosMap.put(domainListItemBean.getId() + "", domainListItemBean);
				motivos.add(new SelectItem(domainListItemBean.getId(), domainListItemBean.getNombre()));
			}
			
		} catch (DatabaseException e) {
			e.printStackTrace();
		}
		
		return motivos;
	}	
	public void setMotivos(List<SelectItem> motivos) {
		this.motivos = motivos;
	}
	public String getCastigoSeleccionado() {
		return castigoSeleccionado;
	}
	public void setCastigoSeleccionado(String castigoSeleccionado) {
		this.castigoSeleccionado = castigoSeleccionado;
	}
	
	public List<SelectItem> getCastigos() {
		castigosMap = new HashMap<String, DomainListItemBean>();
		castigos =  new ArrayList<SelectItem>();
		try {
			List<DomainListItemBean> castigosBean = service.getCastigos();
			for (DomainListItemBean domainListItemBean : castigosBean) {
				castigosMap.put(domainListItemBean.getId() + "", domainListItemBean);
				castigos.add(new SelectItem(domainListItemBean.getId(), domainListItemBean.getNombre()));
			}			
		} catch (DatabaseException e) {
			e.printStackTrace();
		}
		
		return castigos;
	}
	public void setCastigos(List<SelectItem> castigos) {
		this.castigos = castigos;
	}
	
	public Long getCodigo() {
		return codigo;
	}
	public void setCodigo(Long codigo) {
		this.codigo = codigo;
	}
	public String getNombre() {
		return nombre;
	}
	public void setNombre(String nombre) {
		this.nombre = nombre;
	}
	public void action(ActionEvent event) {
        System.out.println("Codigo " + codigo);
        UserDataBean userDataBean = new UserDataBean();
        userDataBean.setCodigo(codigo);
        
        try {
			userDataBean = service.getUserDataBeanByCode(userDataBean);
			if(userDataBean != null){
				nombre = userDataBean.getNombre();
			}else{
				System.out.println("Usuario no encontrado");
			}
		} catch (DatabaseException e) {
			e.printStackTrace();
		}
    }
	public void actionSancionar(ActionEvent event) {
		DomainListItemBean motivoBean = motivosMap.get(motivoSeleccionado);
		DomainListItemBean castigosBean =castigosMap.get(castigoSeleccionado);		
		System.out.println(motivoBean.getNombre());
		System.out.println(motivoBean.getId());
		System.out.println(codigo);
	}
	
	public void actionCrearSancion(ActionEvent event) {
		SancionBean sancionBean = new SancionBean();
		sancionBean.setNombre(nombre);
		DomainListItemBean castigo = castigosMap.get(castigoSeleccionado);
		sancionBean.setCastigoId(castigo.getId());
		DomainListItemBean motivo = motivosMap.get(motivoSeleccionado);
		sancionBean.setMotivoId(motivo.getId());
		sancionBean.setUserId(1l);		
		try {
			Long id = service.createSancion(sancionBean);
			if(id > 0){
				nombre = "";
				codigo = 0L;
				motivoSeleccionado = "";
				castigoSeleccionado = "";
			}
		} catch (DatabaseException e) {
			e.printStackTrace();
		}
	}
	public String thisPage(){
		return thisPage;
	}
}
